import Koa from 'koa'
import Router from 'koa-router'
import bodyParser from 'koa-bodyparser'
import { DataTypes, Op, Sequelize } from 'sequelize'
import cors from '@koa/cors'

let app = new Koa();
let router = new Router();
app.use(cors());//跨域
app.use(bodyParser());//解析请求体

//初始化sequelize实例
let sequelize = new Sequelize('books','root','123456',{
    dialect:'mysql',
    host:'localhost'
})

async function sync() {
    await sequelize.sync()
}

//定义book模型
let Book = sequelize.define('book',{
    bookName:DataTypes.STRING,
    author:DataTypes.STRING
})

// await Book.bulkCreate([ // 批量创建书籍记录
//     {
//         bookName: 'vue3前端开发框架应用',
//         author: '董宁',
//     },
//     {
//         bookName: '围城',
//         author: '钱中书'
//     }
// ]);

//定义获取所有书籍的路由
router.get('/book',async(ctx)=>{
    console.log(ctx.request.query);//打印请求参数
    let keyword = ctx.request.query.keyword || '';//获取查询参数keyword，如果没有默认空字符串
    console.log(keyword);
    let result;
    if (keyword) {//如果keyword存在
        result = await Book.findAll({//查询所有书籍
            where:{
                [Op.or]:{
                    bookName:{
                        [Op.like]:`%${keyword}%`
                    },
                    author:{
                        [Op.like]:`%${keyword}%`
                    }
                }
            }
        })
    }else{//如果不存在，查询所有书籍
        result = await Book.findAll();
    }
    ctx.body = {
        code:1000,
        data:result,
        msg:'查询成功'
    }
    
});
//查询单本书
router.get('/book/:id',async(ctx)=>{
    let id = ctx.params.id || 0;//获取书籍ID。如果没有则默认为0
    let book = await Book.findByPk(id);
    ctx.body = {
        code:1000,
        data:book,
        msg:'查询成功'
    }
})
//新增
router.post('/book',async(ctx)=>{
    let obj = ctx.request.body;//获取请求体
    console.log(obj);

    let result = await Book.create(obj);//创建书籍记录
    ctx.body = {
        code:1000,
        data:result,
        msg:'新增成功'
    }
})
//修改
router.put('/book/:id',async(ctx)=>{
    let id = ctx.params.id || 0;//获取书籍ID。如果没有则默认为0
    let obj = ctx.request.body;//获取请求体
    console.log(id);
    console.log(obj);
    
    let result = await Book.update(obj,{where:{id}});//更新书籍记录
    ctx.body = {
        code:1000,
        data:result,
        msg:'修改成功'
    }
})
//删除
router.delete('/book/:id',async(ctx)=>{
    let id = ctx.params.id || 0;//获取书籍ID。如果没有则默认为0
    let result = await Book.destroy({where:{id}});//删除书籍记录
    ctx.body = {
        code:1000,
        data:result,
        msg:'删除成功'
    }
})

app.use(router.routes());//使用路由
sync()
let prot = 3000;
app.listen(prot);
console.log(`服务器运行于：http://localhost:${prot}`);
